package invoker;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Hashtable;

import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;

import command.Command;

/**
 * 
 * @author camara
 *
 */
public class Ecouteur implements ActionListener, DocumentListener, CaretListener {

	private boolean majEnCour;
	private String texte;
	java.util.Hashtable<String , Command> commandes ;
	//public boolean majCompIHMEnCour;
	
	public Ecouteur (){
		commandes = new Hashtable<String, Command>();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		
		menuAppuye(e.getActionCommand());

	}
	
	@Override
	public void removeUpdate(DocumentEvent e) {
		menuAppuye("Effacer");
		//System.out.println("remove " + e.getLength() + " " + e.getOffset());
		
	}
	
	@Override
	public void insertUpdate(DocumentEvent e) {
		try {
			texte = e.getDocument().getText(e.getOffset(), e.getLength());
			menuAppuye("Saisir");
			
			//System.out.println("insert");
		} catch (BadLocationException e1) {
			e1.printStackTrace();
		}
		
	}
	
	@Override
	public void changedUpdate(DocumentEvent e) {
		//System.out.println("changed");
		
	}
	
	@Override
	public void caretUpdate(CaretEvent e) {
		//System.out.println("care update ");
		//majCompIHMEnCour= true;
		menuAppuye("Selectionner");
	}

	public void menuAppuye(String commande){
		
		if(! majEnCour){ //si la maj provient du moteur il le met plus a jour
			majEnCour = true;
			Command cmd = (Command) (commandes.get(commande));
			cmd.executer();
			majEnCour = false;
		}
		
	}
	
	public void addCommand(String code, Command cmd){
		commandes.put(code, cmd);
	}

	public String getTexte() {

		return texte;
	}
	
}
